跳到主要内容

简单机器学习练习 泰坦尼克沉船数据

好,我们已经对泰坦尼克沉船数据有了一个基本的了解,下一步我们将使用机器学习中的一个简单算法建立模型。看看能否通过模型预测一个人是否最终存活下来,并与事实进行对比。

KNIME 中的决策树节点

我们之前学习过, 机器学习节点一般都分为两个部分,一部分是 XXXX Learner,一部分是 XXXX Predictor,Learner 学习到模型之后,把模型和测试数据再塞给 Predictor 就完成了一次学习与预测的过程。我们先来看 Decision Tree Learner 的配置:

泰坦尼克沉船数据的 Decision Tree 配置

泰坦尼克号船难的 Decision Tree 配置

通过其中 Class column 选出模型需要预测的列,Quality Measure 选择 基尼不纯度 或是 熵 都可以,这两者可以近似替代,我倾向于使用度量信息量的熵,Pruning method 选择剪枝算法,MDL 或是 No Pruning(不选剪枝,不推荐),其余的,默认选项即可。

配置完成之后,即可对测试集数据进行训练,右键节点选择 View: Decision Tree View 获得决策树的可视化结果。

泰坦尼克沉船数据的Decision Tree结果

泰坦尼克沉船数据的Decision Tree结果

对于泰坦尼克沉船数据来说,在我们的简单配置下,学习得到的 Decision Tree 结果和之前介绍过的预测打高尔夫球的决策树并没有什么不同,只是多了一些更详细的说明。从第一个根节点往下,首先判断的是 Sex,如果是 male 男性,那么直接预测他死亡(0),如果是 female 女性,先预测她活着,然后根据 SibSp (同在船上的兄妹及配偶的数量)以及 Parch(同在船上的父母或子女的数量)来进一步预测这个人的生存情况。从逻辑上来看,生存与否的确和性别以及亲属的数量相关,节点学习得到的结果是符合预期的,也没有观察到过拟合的 Decision Tree 节点,所以这个粗糙的模型我们是认可的,可以做为其他机器学习方法的一个基准。我们现在还没有在另外的数据集上验证这个模型,但却已经认可了这个基准模型,这种情况是不多见的,这是可解释性模型的一个优点。

泰坦尼克沉船数据的 Decision Tree View 中的一个节点

泰坦尼克沉船数据的 Decision Tree View中 的一个节点

让我们再仔细观察 Decision Tree 中的一个具体节点,来了解节点中的数据。其中0(320/397)代表了这个节点预测结果为0(死亡),落入这个节点的数据一共有397人,其中320人符合我们的模型预期。节点中部的 Table 部分描述了符合节点预测以及不符合节点预测的具体数据以及比例,节点下部的 Chart 部分,以可视化的形式描述了同样的数据。值得注意的是,在整个工作流中,因为我们在上游节点使用了 Color Manager 对数据进行标记(生存1标记为绿色,死亡0标记为红色),所以这里的可视化会非常的清晰明了。

我们接下来看一下这个模型在测试集上的效果。接入 Decision Tree Predictor 与 Scorer 节点,如下图所示:

预测测试集数据并进行评价

预测测试集数据并进行评价

在数据进入 Decision Tree Learner 和 Decision Tree Predictor 之前,用 Partitioning 节点分割原始数据集的,我们把其中的一部分数据(通常称为训练集,大约占总数据百分之七十)送给 Learner 节点,把另外的一部分数据(通常称为测试集,大约占总数据百分之三十)送给 Predictor 节点,最后接入 Scorer 节点来考察模型在测试集上的表现。图中最右边是 Scorer 节点的节点配置。

模型评价结果

模型评价结果

当运行完整个 Workflow 工作流之后,我们右键 Scorer 节点,选择 View: Confusion Matrix,得到上面的评价结果。因为这是一个分类问题的模型,所以有实际为 1 预测为 1、实际为 1 预测为 0、实际为 0 预测为 1、实际为 0 预测为 0,这四种情况,将四种情况的数据按照矩阵列写就称为 Confusion Matrix 混淆矩阵。对于泰坦尼克这个具体问题来说,1 和 0 的地位是平等的,所以只看左下角的 Accuracy (准确率)结果就可以。但对于某些问题来说,1 和 0 的地位是不平等的,比如在癌症预测时,预测为癌症(假设为 1)与没有癌症(假设为 0)这两种预测结果来说,人的承受能力是不一样的,如果实际这个人没有癌症,但预测为有癌症,那么这个误诊不是那么严重,但如果实际这个人有癌症,但预测为没有癌症,耽误了最佳诊疗时间,那么这个误诊就比较严重了。在这种时候,只这个模型的准确率是没有太大意义的,需要另外设计其他指标进行模型评价。

我们没有做任何事情,只是把 Decision Tree 这么一摆,在自己划分的测试集上就获得了 79.8% 的准确率,如果原始问题是一个值得深入的问题,那么这个准确率就是我们接下来工作的 Baseline 基准线。要么用更高级的算法,要么收集数据,要么调整现有模型参数,这就是另外的话题了。

至此,我们通过泰坦尼克沉船数据,已经从分析到预测走完了整个流程,也希望你能够静下心来自己做做看。

另外,虽然我们在整个过程中用的机器学习算法不是很时髦, 也不够 state-of-the-art(SOTA 最先进的),但决策树及其扩展模型,绝对值得成为我们机器学习工具箱中的一把有力工具。

整体 workflow

整体 workflow